﻿/**
 * 
 */
package util;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;


public class JdbcUtils {
	//配置文件的默认配置，声明对象时会自动加载
	private static ComboPooledDataSource dataSource = new ComboPooledDataSource();
	//事务专用连接，加上static 全局使用，private不能外部使用
	private static Connection conn = null;
	/**
	 * 使用连接池返回一个连接对象
	 * @return
	 * @throws SQLException 
	 */
	public static Connection getConnection() throws SQLException{
		
		if(conn != null) return conn;
		conn = dataSource.getConnection();
		
		return conn;
		
		
	}
	/**
	 * 返回连接池对象
	 * @return
	 */
	public static DataSource getDataSource() {
		return dataSource;
	}
	
	/**
	 * 开启事务
	 * 1、获取一个connection，设置开启事务的操作
	 * 2、把connection这个对象给dao 
	 * @throws SQLException 
	 */
	public static void beginTransaction() throws SQLException {
		if(conn != null) throw new SQLException("事务已经开启了！");
		conn = getConnection();
		conn.setAutoCommit(false);
	}
	/**
	 * 提交事务
	 * 1、获取提交事务的connection对象，调用commit方法
	 * @throws SQLException 
	 */
	public static void commitTransaction() throws SQLException {
		if(conn == null) throw new SQLException("还没有开启事务，不能提交！");
		conn.commit();
		conn.close();
		conn = null;   //表示事务已经结束，保证下次调用getConnection获取对象就不会再获取到原来的conn对象
	}
	/**
	 * 回滚事务
	 * 1、获取提交事务的connection对象，调用rollback方法
	 * @throws SQLException 
	 */
	public static void rollbackTransaction() throws SQLException {
		if(conn == null) throw new SQLException("还没有开启事务，不能回滚！");
		conn.rollback();
		conn.close();
		conn = null;
	}
}
